package br.com.advocacia.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.advocacia.entidade.AssuntoJurisprudencia;
import br.com.advocacia.logica.contract.DefaultLogicaContract;
import br.com.advocacia.util.FacesUtil;
import br.com.advocacia.util.StringUtil;

@ManagedBean(name="assuntoJurisprudenciaFaces")
@ViewScoped
public class AssuntoJurisprudenciaFaces extends FacesUtil {
	
	private static final long serialVersionUID = -7977605925364598025L;

	@ManagedProperty(value = "#{logicaDefault}")
	private DefaultLogicaContract<AssuntoJurisprudencia> logicaAssuntoJurisprudencia;
	
	private AssuntoJurisprudencia assuntoJurisprudencia = new AssuntoJurisprudencia();
	private List<AssuntoJurisprudencia> listaAssuntoJurisprudencia = new ArrayList<>();
	private String assuntoJurisprudenciaBusca;

	
	public void adicionar() {
		try {
			if (validaCampos()) {
				logicaAssuntoJurisprudencia.adicionar(assuntoJurisprudencia);
				adicionarMensagem("Assunto Jurisprudência adicionado com sucesso");
				this.buscarAssuntoJurisprudencia();
				fecharModal("dialogAssuntoJurisprudencia");
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao adicionar o Assunto Jurisprudência");
		}
	}
	
	public void prepararAdicionar() {
		this.assuntoJurisprudencia = new AssuntoJurisprudencia();
		abrirModal("dialogAssuntoJurisprudencia");
	}
	
	public void selecionarRegistro(Long idArea, boolean editar) {
		try {
			this.assuntoJurisprudencia = logicaAssuntoJurisprudencia.obterPorId(AssuntoJurisprudencia.class,idArea);
			
			if (editar) {
				abrirModal("dialogAssuntoJurisprudencia");
			} else {
				abrirModal("dialogExcluir");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void editar() {
		try {
			if (validaCampos()) {
				logicaAssuntoJurisprudencia.editar(this.assuntoJurisprudencia);
				adicionarMensagem("Assunto Jurisprudência editado com sucesso");
				fecharModal("dialogAssuntoJurisprudencia");
				this.buscarAssuntoJurisprudencia();
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao editar o Assunto Jurisprudência");
		}
	}
	
	public void remover() {
		try {
			logicaAssuntoJurisprudencia.remover(AssuntoJurisprudencia.class, this.assuntoJurisprudencia.getId());
			adicionarMensagem("Assunto Jurisprudência removido com sucesso");
			fecharModal("dialogExcluir");
			this.buscarAssuntoJurisprudencia();
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao remover o Assunto Jurisprudência");
		}
	}
	
	public void buscarAssuntoJurisprudencia() {
		if (listaAssuntoJurisprudencia != null) {
			this.listaAssuntoJurisprudencia.clear();
		}
		
		try {
			if (!StringUtil.textoPreenchido(assuntoJurisprudenciaBusca)) {
				this.listaAssuntoJurisprudencia =  logicaAssuntoJurisprudencia.buscarTodos(AssuntoJurisprudencia.class, "assunto");
			} else {
				this.listaAssuntoJurisprudencia = logicaAssuntoJurisprudencia.buscarPorCampo(AssuntoJurisprudencia.class, "assunto", assuntoJurisprudenciaBusca);
			}
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao buscar as informações");
		}
	}
	
	public boolean validaCampos() {
		boolean valido = true;
		
		if (!StringUtil.textoPreenchido(this.assuntoJurisprudencia.getAssunto())) {
			adicionarMensagem("O campo assunto é obrigatório");
			valido = false;
		}
		return valido;
	}
	
	public void setlogicaAssuntoJurisprudencia(DefaultLogicaContract<AssuntoJurisprudencia> logicaAssuntoJurisprudencia) {
		this.logicaAssuntoJurisprudencia = logicaAssuntoJurisprudencia;
	}

	public List<AssuntoJurisprudencia> getListaAssuntoJurisprudencia() {
		return listaAssuntoJurisprudencia;
	}

	public void setListaAssuntoJurisprudencia(List<AssuntoJurisprudencia> listaAssuntoJurisprudencia) {
		this.listaAssuntoJurisprudencia = listaAssuntoJurisprudencia;
	}

	public String getAssuntoJurisprudenciaBusca() {
		return assuntoJurisprudenciaBusca;
	}

	public void setAssuntoJurisprudenciaBusca(String AssuntoJurisprudenciaBusca) {
		this.assuntoJurisprudenciaBusca = AssuntoJurisprudenciaBusca;
	}

	public AssuntoJurisprudencia getAssuntoJurisprudencia() {
		return assuntoJurisprudencia;
	}

	public void setAssuntoJurisprudencia(AssuntoJurisprudencia AssuntoJurisprudencia) {
		this.assuntoJurisprudencia = AssuntoJurisprudencia;
	}
	
	
}